서브클래싱 numpy.ndarray 은 도메인 전용 데이터 구조를 생성하는 데 사용되는 고수준의 아키텍처 결정이며, 원시 수치 데이터와 함께 메타데이터 (단위, 좌표 또는 샘플링 속도 등)를 캡슐화합니다. 표준 파이썬 클래스와 달리, NumPy 객체는 종종 __init__을 호출하지 않고 생성됩니다.
초기화 삼각형
설계자는 표준 생성자가 건너뛰어지는 세 가지 서로 다른 인스턴스화 경로를 고려해야 합니다:
- 명시적 생성: 클래스 이름을 사용하여 (처리되며
__new__) - 뷰 캐스팅: 기존 배열을 자신의 서브클래스로 재해석하는 것입니다.
- 템플릿에서 새 생성: 기존 서브클래스 인스턴스의 슬라이스 또는 복제본을 만드는 것입니다.
특수한 __array_finalize__ 훅은 이 경로들 사이에서 메타데이터가 동기화되는 수렴 지점입니다.
행동적 취약성
서브클래싱은 NumPy C-API와 강하게 결합됩니다. 스칼라를 반환하는 연산(예: np.mean())는 종종 "stripping" 서브클래스 식별자를 제거하고 표준 ndarray으로 되돌아갑니다. 따라서 상태 전환을 통해 신중하게 처리하지 않으면 메타데이터 관리는 항상 위험이 따릅니다.
전문가 통찰
서브클래싱은 당신의 객체가
isinstance(obj, np.ndarray)를 기대하는 라이브러리에 바로 대체될 수 있어야만 필수입니다. 그렇지 않다면, 컴포지션 (배열을 감싸는 것)이 더 안전합니다.TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>